///********************************************************************
///* Copyright © 2011 fishr (fishr.flash@gmail.com)  
///********************************************************************


package su.fishr.effects 
{
	import flash.filters.BevelFilter;
	import flash.filters.GlowFilter;
	import flash.display.Shape;
	import flash.utils.ObjectInput;
   /**
	 *   Вспомогательный класс хранящий пакеты
	 * наборов фильтров в публичных asset-методах для использования
	 * в классе FlySquares.
	 *   Новые методы класса дополняются самостоятельно. Класс удобен для
	 * хранения часто, устойчиво используемых, в плагин-эффекте <code>FlySquares()</code>,
	 * последовательностей фильтров 
	 *   Об использовании смотрите описание метода 
	 * <code>
	 * 		<a title="createFilters" alt="createFilters" href="FlySquares.html#createFilters" >
	 * 			<b>
	 * 				createFilters
	 * 			</b>
	 * 		</a>
	 * </code>
	 * класса 
	 * 	<code>
	 * 		<a title="FlySquares" alt="FlySquares" href="FlySquares.html" > 
	 * 		  <b>
	 * 			FlySquares()
	 * 		  </b>
	 * 		</a>
	 * 		
	 *  </code>
	 * 
	 * <p>
	 * 
	 * 	Структуру get-метода который необходимо создать для
	 * использования в экземпляре FlySquares можно выразить следующим псевдокодом:
	 * <pre background = "grey">
	 * 	<code>
	 * 		public function get ... ():Array
	 * 		{
	 * 			var enroll:Number = 0.0 - 1.0
	 * 			var ..._1:Object = {"stringName": {...}, "stringName": {...},"stringName": {...}}
	 * 			var ..._2:Object = {"stringName": {...}, "stringName": {...}, "stringName": {...}}
	 * 			var ..._3:Object = {"stringName": {...}, "stringName": {...},"stringName": {...}}
	 * 			var ..._4:Object = {"stringName": {...}, "stringName": {...},"stringName": {...}}
	 * 
	 * 			var rezArray:Array = (enroll, ..._1, ..._2, ..._3);
	 * 
	 * 			return rezArray;
	 * 		{
	 * 	</code>
	 * 	
	 * </pre>
	 * 
	 * 	<b>Пояснение к коду.</b> 
	 * Переменная enroll (присвоение именно такого имени не обязательно) в данном примере
	 * характеризует объем фрагментов, от общего их числа, в приложении FlySquares, к которым будет 
	 * применена данная последовательность фильтров, где значени 0(нуль) - указывает на то, что
	 * фильтры не будут приложены ни к одному фрагменту, значение 1(едниница) - указывает на то,
	 * что фильтры будут применены к 100% фрагментов, т.е. ко всем.
	 * Имена переменных представляющих пакеты фильтров могут быть выбраны произвольно.
	 * Объекты фильтров ("stringName": {...}) формируются в соответствии с требованиями
	 * формирования плагинов-фильтров в пакете плагин-эффектов от GreenSock. 
	 * То есть: "строковое имя фильтра-плагина (в соответствии со строковым именем соответствующего плагина от GreenSock)
	 * : параметры( в соответсвии с аргументами активации плагина GreenSock)".
	 * Пример: 
	 * <pre>
	 * 	<code>
	 * 		var ...:Object = { 'bevelFilter': { distance: .3, 
										blurX: 4, 
										blurY: 4, 
										angle: 45, 
										shadowColor: .6, 
										shadowAlpha: .6,   
										strength: 1.4 }}
	 * 	</code>
	 * </pre>
	 * 
	 * в качестве перечня параметров к фильтру-плагину может быть также передан объект нативного
	 * класса плагина, в этом случае код может выглядеть так:
	 * 
	 * <pre>
	 * 	<code>
	 * 		import flash.filters.BevelFilter;
	 * 		...
	 * 		
	 * 		var bevel:BevelFilter = new BevelFilter(... args);
	 *		var ....:Object = {"bevelFilter":bevel};
	 * 
	 * 	</code>
	 * </pre>
	 * </p>
	 *  
	 * Каждый член результирующего массива, кроме первого, имеющего тип Namber, может содержать
	 * не один фильтр, а последовательность фильтров, в соответствии с возможностями наложения
	 * фильтров в плагин-эффекте <code> TweenMax()</code>. Или быть пустым, не содержать ни одного
	 * объекта. Об использовании фильтров в плагинах
	 * GreenSock смотрите соответствующую документацию.
	 *  
	 * 
	 * @version                1.0
	 * @playerversion          Flash 9
	 * @langversion            3.0
	 * @author                 fishr
	 * @created                16.07.2011 19:53
	 */
	public final class AssetFilters
	{

	/**-------------------------------------------------------------------------------
	* 
	*								P R O P E R T I E S
	* 
	* --------------------------------------------------------------------------------
	*/
	//{
		/**
		 * 
		 * 	Метод является рабочим примером формирования
		 * групп фильтров для передачи в объект <code>FlySquares()</code>.
		 * <p>
		 *  Возвращает массив фиксированной длинны, содержащий следующие
		 * данные в следующем порядке:
		 * 
		 * <ul>
		 * 		<li>...:Number - Число в диапазоне от 0 до 1 указывающее вероятность применения
		 *     			данного пакета к фрагменту. По существу означающее кол-во случайно взятых
		 * 				фрагментов к которым будет применена данная последовательность фильтров.
		 * 		</li>
		 * 		<li> ...:Object - Хеш содержащий один и более объектов-фильтров оформленных в 
		 * 				соответствии с требованиями к плагинам-фильтрам от GreenSock
		 * 
		 * 		</li>
		 * 		<li> ...:Object - Хеш содержащий один и более объектов-фильтров оформленных в 
		 * 				соответствии с требованиями к плагинам-фильтрам от GreenSock
		 * 
		 * 		</li>
		 * 		<li> ...:Object - Хеш содержащий один и более объектов-фильтров оформленных в 
		 * 				соответствии с требованиями к плагинам-фильтрам от GreenSock
		 * 
		 * 		</li>
		 * </ul>
		 * 
		 *  Все члены, кроме первого, результирующего массива, могут быть пустыми.
		 * </p>
		 * 
		 * 
		 */
		static public function get meltingIce():Array
		{	
			///перечень фильтров и настроек
			var bevel:BevelFilter = new BevelFilter(5, 15, 0xFFFFFF, .4, 1, .4, 10, 10, 1, 2, "inner", true);
			var glow:GlowFilter = new GlowFilter();
			
			var glowBomb2:GlowFilter = new GlowFilter( 0xFF0000, .7, 35, 65, 2, 1, true);
			var glowBomb:GlowFilter = new GlowFilter( 0xFFFFFF, 1, 35, 25, 2.5, 1);
			
			var glowPostBomb:GlowFilter = new GlowFilter( 0xFFFFFF, 1, 1, 1, 5, 1);
			
			///объект содержащий первый пакет фильтров
			var prev:Object = 
			{
				"glowFilter": glowBomb	
			}
			
			///объект содержащий второй пакет фильтров
			var second:Object =
			{
				"glowFilter": glowPostBomb
			}
			
			
			///объект содержащий третий пакет фильтров
			var third:Object = { };
			
			var fourth:Object = { 'bevelFilter': { distance: .3, 
														blurX: 4, 
														blurY: 4, 
														angle: 45, 
														shadowColor: .6, 
														shadowAlpha: .6,   
														strength: 1.4 }}
														
			
			///результирующий массив который будет передан в
			///в вызывающий класс
			var fin:Array = new Array(5);
			fin[0] = 1; /// вероятность применения к элементу
			fin[1] = prev;///пакет фильтров для наложения в режиме effectBomb
			fin[2] = second;/// начальный пакет фильтров
			fin[3] = third;///пакет фильтров накладываемый после того как элемент занял
							///свою позицию
			fin[4] = fourth;///пакет фильтров анимирование которого начинается
							///после того как все фрагменты заняли свои конечные позиции
			return fin;
		}
	
	
	//}
	
	/**-------------------------------------------------------------------------------
	* 
	*								P R I V A T E 	
	* 
	* --------------------------------------------------------------------------------
	*/	
	//{
	
		
		
	//}
		
		
	}

}